package info.demo.entity;

import java.io.Serializable;

import javax.servlet.http.HttpServletRequest;

public class Page implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -3585463817517558877L;

	private Integer numPagina=1;
	
	private Integer paginaTamanho=30;
	
	private String[] ordemColunas;
	
	private String[] ordemRegras;

	private Integer totalRegistros;

	public Integer getNumPagina() {
		return numPagina;
	}

	public void setNumPagina(Integer numPagina) {
		this.numPagina = numPagina;
	}

	public Integer getPaginaTamanho() {
		return paginaTamanho;
	}

	public void setPaginaTamanho(Integer paginaTamanho) {
		this.paginaTamanho = paginaTamanho;
	}

	public String[] getOrdemColunas() {
		return ordemColunas;
	}

	public void setOrdemColunas(String[] ordemColunas) {
		this.ordemColunas = ordemColunas;
	}

	public String[] getOrdemRegras() {
		return ordemRegras;
	}

	public void setOrdemRegras(String[] ordemRegras) {
		this.ordemRegras = ordemRegras;
	}
	
	/**
	 * Define ordem das colunas no formato: nomeColuna1,ASC|nomecoluna2,DESC
	 * @param ordem
	 */
	public void setColunas(String ordem) {
		if (ordem != null && ordem.length() > 0) {
			String[] regras = ordem.split("\\|");
			if (regras.length > 0) {
				this.ordemColunas=new String[regras.length];
				this.ordemRegras=new String[regras.length];
			    for (int x=0; x<regras.length; x++)
			    {
			    	String subregra[] = regras[x].split(",");
			    	ordemColunas[x]=subregra[0];
			    	if (subregra.length==2) {
			    		ordemRegras[x]=subregra[1];
			    	} else {
			    		ordemRegras[x]="ASC";
			    	}
			    }
			}
		}
	}
	public void setNumeroPagina(String numPagina) {
		try {
			this.numPagina = Integer.parseInt(numPagina);
		}catch(Exception e) {
			this.numPagina=1;
		}
	}
	public void setPaginaTamanho(String tamanho) {
		try {
			this.paginaTamanho = Integer.parseInt(tamanho);
		}catch(Exception e) {
			this.paginaTamanho=30;
		}
	}
	public static Page definaMe(HttpServletRequest request) {
		Page p = new Page();
		p.setNumeroPagina(request.getParameter("numeroPagina"));
		p.setPaginaTamanho(request.getParameter("paginaTamanho"));
		p.setColunas(request.getParameter("ordemColunas"));
		return p;
	}

	public void setTotalRegistros(Integer total) {
		this.totalRegistros = total;
	}

	public Integer getTotalRegistros() {
		return totalRegistros;
	}

	public Integer getNumeroPrimeiroResultado() {
		return (this.getNumPagina()-1)*this.getPaginaTamanho();
	}
	public Integer getNumeroUltimoResultado() {
		int r = this.getNumeroPrimeiroResultado()+this.getPaginaTamanho(); 
		return (r>totalRegistros?totalRegistros:r);
	}
	public Integer getNumTotalPaginas() {
		if (paginaTamanho<=0||totalRegistros<=0)return 0;
		int divisao = getTotalRegistros()/getPaginaTamanho(); 
		int dividendo = getTotalRegistros()%getPaginaTamanho();
		return divisao + (dividendo>0?1:0);
	}
	
}
